#include <linux/init.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/of_device.h>


/**
 * 老师上课写的
 */
// ft5x06设备的初始化函数
int ft5x06_probe(struct i2c_client *client, const struct i2c_device_id *id) {
    printk("This is ft5x06 probe\n");
    return 0;
}

// ft5x06设备的移除函数
int ft5x06_remove(struct i2c_client *client) {
    return 0;
}

// 定义 i2c_device_id 结构体数组,用于标识 ft5x06 设备
static const struct i2c_device_id ft5x06_id[] = {
    { "my-ft5x06", 0 },
    { }
};
MODULE_DEVICE_TABLE(i2c, ft5x06_id);

// 定义 i2c_driver 结构体,描述 ft5x06 设备驱动
static struct i2c_driver ft5x06_driver = {
    .driver = {
        .name   = "my-ft5x06",
        .owner  = THIS_MODULE,
    },
    .probe      = ft5x06_probe,
    .remove     = ft5x06_remove,
    .id_table   = ft5x06_id,
};

// 驱动初始化函数
static int __init ft5x06_driver_init(void) {
    int ret;
    // 注册I2C设备驱动
    ret = i2c_add_driver(&ft5x06_driver);
    if (ret < 0) {
        printk("i2c_add_driver is error\n");
        return ret;
    }
    return 0;
}

// 驱动退出函数
static void __exit ft5x06_driver_exit(void) {
    // 注销I2C设备驱动
    i2c_del_driver(&ft5x06_driver);
}

module_init(ft5x06_driver_init);
module_exit(ft5x06_driver_exit);
MODULE_LICENSE("GPL");
